import request from '@/utils/request';

/**
 * 处理 JSON-RPC 响应，提取数据或抛出错误
 * @param {Object} response Axios 响应对象
 * @returns {Object} 成功响应的 result 部分
 * @throws {Error} 如果响应包含错误
 */
function handleResponse(response) {
  if (response?.data?.error) {
    console.error("API Error:", response.data.error);
    throw new Error(response.data.error.message || 'API 请求失败');
  }
  // 直接返回 result 部分，让调用方处理具体内容
  if ('result' in response?.data) {
      return response.data.result;
  }
  // 未知错误或非预期格式
  console.error("Unexpected API response format:", response?.data);
  throw new Error('API 响应格式错误或非预期结果');
}

/**
 * 验证算法配置
 * @param {Object} algorithmConfig 算法配置对象
 * @returns {Promise<Object>} 验证结果
 */
export const validateAlgorithmConfig = async (algorithmConfig) => {
  try {
    const response = await request.post('/v1/jsonrpc2/', {
      jsonrpc: '2.0',
      id: 'validate_algorithm_config_' + Date.now(),
      method: 'algo_manager.validate',
      params: algorithmConfig
    });
    return handleResponse(response);
  } catch (error) {
    console.error("验证算法配置失败:", error);
    throw error instanceof Error ? error : new Error('验证算法配置失败');
  }
};

/**
 * 获取可用的算法引擎列表
 * @returns {Promise<Array>} 算法引擎列表
 */
export const getAvailableEngines = async () => {
  try {
    const response = await request.post('/v1/jsonrpc2/', {
      jsonrpc: '2.0',
      id: 'get_available_engines_' + Date.now(),
      method: 'algo_manager.getEngines',
      params: {}
    });
    return handleResponse(response);
  } catch (error) {
    console.error("获取可用算法引擎失败:", error);
    throw error instanceof Error ? error : new Error('获取可用算法引擎失败');
  }
};

/**
 * 获取算法运行状态
 * @returns {Promise<Object>} 算法运行状态
 */
export const getAlgorithmStatus = async () => {
  try {
    const response = await request.post('/v1/jsonrpc2/', {
      jsonrpc: '2.0',
      id: 'get_algorithm_status_' + Date.now(),
      method: 'algo_manager.getStatus',
      params: {}
    });
    return handleResponse(response);
  } catch (error) {
    console.error("获取算法运行状态失败:", error);
    throw error instanceof Error ? error : new Error('获取算法运行状态失败');
  }
};
